*Code for replication of "Popular financial reporting increases understanding,interest, and trust: experimental evidence"
*Authors: Jinhai Yu, Nicolai Petrovsky, Zhiwei Zhang and Josephine Gatti Schafer
*Journal: International Public Management Journal
*Software: Stata SE 18.5
*Date: 20250429


*Part 1 Check for variables
use data_PFR.dta,clear

*All variables used in the analysis
sum su eu ou1_correct ou2_correct ou3_correct treatment pre_inform female white black latino asian vote_record voted_for_R voted_for_D voted_for_other age2 age3 age4 age5 age6 school school1 school2 school3 school4 school5 homeowner income2 income3 income4 local_vote public_meeting advisory_board survey other_participation helpful sense_read city_report budget_invol transparency record_infor good_decison care_acess 


*Part 2 Tables and figures reported in the main text

*Table 1

*Interest
*all 4 items
alpha helpful sense_read city_report budget_invol
factor helpful sense_read city_report budget_invol,factors(1)
rotate 
predict interest4

*3 items: removing sense_read, reported in Table 1
alpha helpful city_report budget_invol
factor helpful city_report budget_invol,factors(1)
rotate 
predict interest3

*Trust
alpha transparency record_infor good_decison care_acess
factor transparency record_infor good_decison care_acess,factors(1)
rotate
predict trust


*Tabel 2 summary stats
label variable pre_inform "Informed about budget"
label variable age2 "Age 25-34"
label variable age3 "Age 35-44"
label variable age4 "Age 45-54"
label variable age5 "Age 55-64"
label variable age6 "Age 65 and above"
label variable school "education coded categorical"
label variable school1 "No school"
label variable school2 "High school"
label variable school3 "Some college"
label variable school4 "Associate degree"
label variable school5 "Bachelor and above"
label variable homeowner "Homeowner"
label variable income2 "Income 25k to 50k"
label variable income3 "Income 50k to 10k"
label variable income4 "Income 10k and above"
label variable white "White"
label variable black "African American"
label variable latino "Latino"
label variable asian "Asian"
label variable vote_record "vote coded categorical"
label variable voted_for_R "Vote for Trump"
label variable voted_for_D "Vote for Biden"
label variable voted_for_other "Vote for others"
label variable local_vote "Local voting"
label variable public_meeting "Public meeting"
label variable advisory_board "Advisory board"
label variable survey "Responding to survey"
label variable other_participation "Other participation"
label variable treatment "PAFR treatment"
label variable female "Female"

label variable interest3 "Interest score3"
label variable interest4 "Interest score"
label variable trust "Trust score"
label variable eu "Easy to understand"
label variable su "Subjective understanding"
label variable ou1_correct "Objective understanding 1"
label variable ou2_correct "Objective understanding 2"
label variable ou3_correct "Objective understanding 3"

label variable helpful "Helpful"
label variable sense_read "Meaningful"
label variable city_report "Access to report"
label variable budget_invol "Budget involvement"
label variable transparency "Transparency commitment"
label variable record_infor "Recording information"
label variable good_decison "Good decision"
label variable care_acess "Caring about access"


sum su eu ou1_correct ou2_correct ou3_correct interest4 trust treatment pre_inform female white black latino asian voted_for_R voted_for_D voted_for_other age2 age3 age4 age5 age6 school1 school2 school3 school4 school5 homeowner income2 income3 income4 local_vote public_meeting advisory_board survey other_participation

outreg2 using table2.doc, label replace sum(log) keep(su eu ou1_correct ou2_correct ou3_correct interest4 trust treatment pre_inform female white black latino asian voted_for_R voted_for_D voted_for_other age2 age3 age4 age5 age6 school1 school2 school3 school4 school5 homeowner income2 income3 income4 local_vote public_meeting advisory_board survey other_participation)


*Table 3
eststo clear
foreach var of varlist eu ou1_correct ou2_correct ou3_correct su interest3 trust {
	eststo: reg `var' treatment pre_inform age2 age3 age4 age5 age6 female school2 school3 school4 school5 homeowner income2 income3 income4 white black latino asian i.vote_record local_vote public_meeting advisory_board survey other_participation ,robust
	estimates store `var'
}

esttab using table3_understanding_interest_trust.rtf, compress nonotes noconstant label eqlabels(none) mtitles("Easy to understand" "Objective understanding 1" "Objective understanding 2" "Objective understanding 3" "Subjective understanding" "Interest Score" "Trust Score") nogaps b(%9.3f) se(%9.3f) star(* 0.10 ** 0.05 *** 0.01) sfmt(%9.0fc) s(N, label("Observations") fmt(0 0 )) addnotes("Note: Robust standard errors are in parentheses. * p < 0.10, ** p < 0.05, *** p < 0.01.") replace


*figure 1
coefplot eu ou1_correct ou2_correct ou3_correct su interest3 trust, scheme(s2mono) ///
	vertical keep(treatment) plotlabels("Easy to understand" "Objective understanding 1" "Objective understanding 2" "Objective understanding 3" "Subjective understanding" "Interest Score" "Trust Score") /// 
	omitted baselevels xlab( ,labsize(medlarge)) ylab(, labsize(medlarge) nogrid) yline(0, lcolor(black)) graphregion(lcolor(none) color(white)) msize(small) ytitle("Effects on Outcomes") 
	
graph save f1_understanding_interest_trust, replace



*Table 4
eststo clear
foreach var of varlist eu ou1_correct ou2_correct ou3_correct su interest3 trust {
	eststo: reg `var' c.treatment##c.pre_inform  age2 age3 age4 age5 age6 female school2 school3 school4 school5 homeowner income2 income3 income4 white black latino asian i.vote_record local_vote public_meeting advisory_board survey other_participation ,robust
}

esttab using table4_inform.rtf, compress nonotes noconstant label eqlabels(none) mtitles("Easy to understand" "Objective understanding 1" "Objective understanding 2" "Objective understanding 3" "Subjective understanding" "Interest Score" "Trust Score") nogaps b(%9.3f) se(%9.3f) star(* 0.10 ** 0.05 *** 0.01) sfmt(%9.0fc) s(N, label("Observations") fmt(0 0 )) addnotes("Note: Robust standard errors are in parentheses. * p < 0.10, ** p < 0.05, *** p < 0.01.") replace


*figure 2
reg eu c.treatment##c.pre_inform  age2 age3 age4 age5 age6 female school2 school3 school4 school5 homeowner income2 income3 income4 white black latino asian i.vote_record local_vote public_meeting advisory_board survey other_participation ,robust

margins, dydx (treatment) at(pre_inform=(1 (2) 10)) post

coefplot, vertical  recast(connected) graphregion(fcolor(white)) ciopts(lcolor(1 1)) color(black) yline(0)xtitle("Level of Informed about Budget") ytitle("Effects on Easy to Understand") rename(1._at =1 2._at =2 3._at =5 4._at =7 5._at =9)

graph save f_2interact_inform_eunderstand.gph,replace


reg trust c.treatment##c.pre_inform  age2 age3 age4 age5 age6 female school2 school3 school4 school5 homeowner income2 income3 income4 white black latino asian i.vote_record local_vote public_meeting advisory_board survey other_participation ,robust

margins, dydx (treatment) at(pre_inform=(1 (2) 10)) post

coefplot, vertical  recast(connected) graphregion(fcolor(white)) ciopts(lcolor(1 1)) color(black) yline(0)xtitle("Level of Informed about Budget") ytitle("Effects on Trust Score") rename(1._at =1 2._at =2 3._at =5 4._at =7 5._at =9)

graph save f2_interact_inform_trust.gph,replace




*Table 5
eststo clear
foreach var of varlist eu ou1_correct ou2_correct ou3_correct su interest3 trust {
	eststo: reg `var' c.treatment##i.vote_record pre_inform age2 age3 age4 age5 age6 female school2 school3 school4 school5 homeowner income2 income3 income4 white black latino asian local_vote public_meeting advisory_board survey other_participation ,robust
}

esttab using table5_vote.rtf, compress nonotes noconstant label eqlabels(none) mtitles("Easy to understand" "Objective understanding 1" "Objective understanding 2" "Objective understanding 3" "Subjective understanding" "Interest Score" "Trust Score") nogaps b(%9.3f) se(%9.3f) star(* 0.10 ** 0.05 *** 0.01) sfmt(%9.0fc) s(N, label("Observations") fmt(0 0 )) addnotes("Note: Robust standard errors are in parentheses. * p < 0.10, ** p < 0.05, *** p < 0.01.") replace


*Figure 3
reg su c.treatment##i.vote_record pre_inform age2 age3 age4 age5 age6 female school2 school3 school4 school5 homeowner income2 income3 income4 white black latino asian local_vote public_meeting advisory_board survey other_participation ,robust

margins, dydx (treatment) at(vote_record=(0 1 2 3)) post

coefplot, vertical  recast(connected) graphregion(fcolor(white)) ciopts(lcolor(1 1)) color(black) yline(0) xtitle("Voting record") ytitle("Effects on Subjective Understanding") rename(1._at ="not voted" 2._at ="for Republican" 3._at ="for Democrat" 4._at ="for others")

graph save f3_interact_su.gph,replace


reg interest3 c.treatment##i.vote_record pre_inform age2 age3 age4 age5 age6 female school2 school3 school4 school5 homeowner income2 income3 income4 white black latino asian local_vote public_meeting advisory_board survey other_participation ,robust

margins, dydx (treatment) at(vote_record=(0 1 2 3)) post

coefplot, vertical  recast(connected) graphregion(fcolor(white)) ciopts(lcolor(1 1)) color(black) yline(0) xtitle("Voting record") ytitle("Effects on Interest Score") rename(1._at ="not voted" 2._at ="for Republican" 3._at ="for Democrat" 4._at ="for others")

graph save f3_interact_interest.gph,replace


reg trust c.treatment##i.vote_record pre_inform age2 age3 age4 age5 age6 female school2 school3 school4 school5 homeowner income2 income3 income4 white black latino asian local_vote public_meeting advisory_board survey other_participation ,robust

margins, dydx (treatment) at(vote_record=(0 1 2 3)) post

coefplot, vertical  recast(connected) graphregion(fcolor(white)) ciopts(lcolor(1 1)) color(black) yline(0) xtitle("Voting record") ytitle("Effects on Trust Score") rename(1._at ="not voted" 2._at ="for Republican" 3._at ="for Democrat" 4._at ="for others")

graph save f3_interact_trust.gph,replace




*Table 6
eststo clear
foreach var of varlist eu ou1_correct ou2_correct ou3_correct su interest3 trust{
	eststo: reg `var' c.treatment##i.school pre_inform age2 age3 age4 age5 age6 female homeowner income2 income3 income4 white black latino asian i.vote_record local_vote public_meeting advisory_board survey other_participation ,robust
}

esttab using table6_school.rtf, compress nonotes noconstant label eqlabels(none) mtitles("Easy to understand" "Objective understanding 1" "Objective understanding 2" "Objective understanding 3" "Subjective understanding" "Interest Score" "Trust Score") nogaps b(%9.3f) se(%9.3f) star(* 0.10 ** 0.05 *** 0.01) sfmt(%9.0fc) s(N, label("Observations") fmt(0 0 )) addnotes("Note: Robust standard errors are in parentheses. * p < 0.10, ** p < 0.05, *** p < 0.01.") replace


*Figure 4
reg ou2_correct c.treatment##i.school pre_inform age2 age3 age4 age5 age6 female homeowner income2 income3 income4 white black latino asian i.vote_record local_vote public_meeting advisory_board survey other_participation ,robust

margins, dydx (treatment) at(school=(1 2 3 4 5)) post

coefplot, vertical  recast(connected) graphregion(fcolor(white)) ciopts(lcolor(1 1)) color(black) yline(0) xtitle("Education level") ytitle("Effects on Objective Understanding 2") rename(1._at ="No school" 2._at ="High school" 3._at ="Some college" 4._at ="Associate degree" 5._at ="Bachelor and above")

graph save f4_interact_edu_ou2.gph,replace


reg interest3 c.treatment##i.school pre_inform age2 age3 age4 age5 age6 female homeowner income2 income3 income4 white black latino asian i.vote_record local_vote public_meeting advisory_board survey other_participation ,robust

margins, dydx (treatment) at(school=(1 2 3 4 5)) post

coefplot, vertical  recast(connected) graphregion(fcolor(white)) ciopts(lcolor(1 1)) color(black) yline(0) xtitle("Education level") ytitle("Effects on Interest Score") rename(1._at ="No school" 2._at ="High school" 3._at ="Some college" 4._at ="Associate degree" 5._at ="Bachelor and above")

graph save f4_interact_edu_interest.gph,replace


reg trust c.treatment##i.school pre_inform age2 age3 age4 age5 age6 female homeowner income2 income3 income4 white black latino asian i.vote_record local_vote public_meeting advisory_board survey other_participation ,robust

margins, dydx (treatment) at(school=(1 2 3 4 5)) post

coefplot, vertical  recast(connected) graphregion(fcolor(white)) ciopts(lcolor(1 1)) color(black) yline(0) xtitle("Education level") ytitle("Effects on Trust Score") rename(1._at ="No school" 2._at ="High school" 3._at ="Some college" 4._at ="Associate degree" 5._at ="Bachelor and above")

graph save f4_interact_edu_trust.gph,replace


*Part 3 Tables reported in the appendix

*Table B2 balance tests
ttest pre_inform,by(treatment)
ttest female,by(treatment)
ttest white,by(treatment)
ttest black,by(treatment)
ttest latino,by(treatment)
ttest asian,by(treatment)
ttest voted_for_R,by(treatment)
ttest voted_for_D,by(treatment)
ttest voted_for_other ,by(treatment)
ttest age2,by(treatment)
ttest age3,by(treatment)
ttest age4,by(treatment)
ttest age5,by(treatment)
ttest age6,by(treatment)
ttest school2,by(treatment)
ttest school3,by(treatment)
ttest school4,by(treatment)
ttest school5,by(treatment)
ttest homeowner,by(treatment)
ttest income2,by(treatment)
ttest income3,by(treatment)
ttest income4,by(treatment)
ttest local_vote,by(treatment)
ttest public_meeting,by(treatment)
ttest advisory_board,by(treatment)
ttest survey,by(treatment)
ttest other_participation,by(treatment)

*Table B3 no controls
eststo clear
foreach var of varlist eu ou1_correct ou2_correct ou3_correct su interest3 trust {
	eststo: reg `var' treatment ,robust
}

esttab using tableB3_no_controls.rtf, compress nonotes noconstant label eqlabels(none) mtitles("Easy to understand" "Objective understanding 1" "Objective understanding 2" "Objective understanding 3" "Subjective understanding" "Interest score" "Trust score") nogaps b(%9.3f) se(%9.3f) star(* 0.10 ** 0.05 *** 0.01) sfmt(%9.0fc) s(N, label("Observations") fmt(0 0 )) addnotes("Note: Robust standard errors are in parentheses. * p < 0.10, ** p < 0.05, *** p < 0.01.") replace

*Table B4 and B5 Convert Likert to binary outcomes
*converting to binary outcomes
eststo clear
foreach var of varlist helpful sense_read city_report budget_invol transparency record_infor good_decison care_acess {
	eststo: tabulate `var',generate(`var'_) 
}

*interst
eststo clear
foreach var of varlist helpful_1 helpful_2 helpful_3 helpful_4 helpful_5 sense_read_1 sense_read_2 sense_read_3 sense_read_4 sense_read_5 {
	eststo: reg `var' treatment pre_inform age2 age3 age4 age5 age6 female school2 school3 school4 school5 homeowner income2 income3 income4 white black latino asian i.vote_record local_vote public_meeting advisory_board survey other_participation ,robust
	estimates store `var'
}

esttab using table_B4_helpful_meaningful.rtf, keep(treatment) compress nonotes noconstant label eqlabels(none) mtitles("helpful_1" "helpful_2" "helpful_3" "helpful_4" "helpful_5" "meaningful_1" "meaningful_2" "meaningful_3" "meaningful_4" "meaningful_5") nogaps b(%9.3f) se(%9.3f) star(* 0.10 ** 0.05 *** 0.01) sfmt(%9.0fc) s(N, label("Observations") fmt(0 0 )) addnotes("Note: Robust standard errors are in parentheses. * p < 0.10, ** p < 0.05, *** p < 0.01.") replace

eststo clear
foreach var of varlist city_report_1 city_report_2 city_report_3 city_report_4 city_report_5 budget_invol_1 budget_invol_2 budget_invol_3 budget_invol_4 budget_invol_5 {
	eststo: reg `var' treatment pre_inform age2 age3 age4 age5 age6 female school2 school3 school4 school5 homeowner income2 income3 income4 white black latino asian i.vote_record local_vote public_meeting advisory_board survey other_participation ,robust
	estimates store `var'
}

esttab using table_B4report_invol.rtf, keep(treatment) compress nonotes noconstant label eqlabels(none) mtitles("city_report_1" "city_report_2" "city_report_3" "city_report_4" "city_report_5" "budget_invol_1" "budget_invol_2" "budget_invol_3" "budget_invol_4" "budget_invol_5") nogaps b(%9.3f) se(%9.3f) star(* 0.10 ** 0.05 *** 0.01) sfmt(%9.0fc) s(N, label("Observations") fmt(0 0 )) addnotes("Note: Robust standard errors are in parentheses. * p < 0.10, ** p < 0.05, *** p < 0.01.") replace


*trust
eststo clear
foreach var of varlist transparency_1 transparency_2 transparency_3 transparency_4 transparency_5 record_infor_1 record_infor_2 record_infor_3 record_infor_4 record_infor_5 {
	eststo: reg `var' treatment pre_inform age2 age3 age4 age5 age6 female school2 school3 school4 school5 homeowner income2 income3 income4 white black latino asian i.vote_record local_vote public_meeting advisory_board survey other_participation ,robust
	estimates store `var'
}

esttab using table_B5transp_record.rtf, keep(treatment) compress nonotes noconstant label eqlabels(none) mtitles("transparency_1" "transparency_2" "transparency_3" "transparency_4" "transparency_5" "record_infor_1" "record_infor_2" "record_infor_3" "record_infor_4" "record_infor_5") nogaps b(%9.3f) se(%9.3f) star(* 0.10 ** 0.05 *** 0.01) sfmt(%9.0fc) s(N, label("Observations") fmt(0 0 )) addnotes("Note: Robust standard errors are in parentheses. * p < 0.10, ** p < 0.05, *** p < 0.01.") replace


eststo clear
foreach var of varlist good_decison_1 good_decison_2 good_decison_3 good_decison_4 good_decison_5 care_acess_1 care_acess_2 care_acess_3 care_acess_4 care_acess_5{
	eststo: reg `var' treatment pre_inform age2 age3 age4 age5 age6 female school2 school3 school4 school5 homeowner income2 income3 income4 white black latino asian i.vote_record local_vote public_meeting advisory_board survey other_participation ,robust
	estimates store `var'
}

esttab using table_B5decision_access.rtf, keep(treatment) compress nonotes noconstant label eqlabels(none) mtitles("good_decison_1" "good_decison_2" "good_decison_3" "good_decison_4" "good_decison_5" "care_acess_1" "care_acess_2" "care_acess_3" "care_acess_4" "care_acess_5") nogaps b(%9.3f) se(%9.3f) star(* 0.10 ** 0.05 *** 0.01) sfmt(%9.0fc) s(N, label("Observations") fmt(0 0 )) addnotes("Note: Robust standard errors are in parentheses. * p < 0.10, ** p < 0.05, *** p < 0.01.") replace

save data_PFR,replace
